package com.example.demo.utils;


import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import org.springframework.web.socket.WebSocketSession;

@Setter
@Getter
@Builder
public class FileMetadata {

    @JsonIgnore     // 添加这个注解可以保证在序列化时自动忽略这个字段
    private WebSocketSession targetSession;     // 目标用户的WebSocketSession

    private String senderId;    // 发送者uu_id

    private String receiverId;  // 接收者uu_id

    private String mimeType;    // 文件类型，一般都用来处理image图片，文件默认stream

    private String fileName;    // 文件名

    private String fileKey;     // 文件唯一标识

    private long fileSize;      // 文件大小

    private String userNickName;    // 发送者的用户名

    private String userNickAvatar;  // 发送者头像

    //    项目初期使用共有的存储桶
    private String fileURL;     // 提供给前端访问的文件链接(可预览可下载，那这样minio中的object就是公开的)

//    这个需要设置为私有的，目前不使用私有的存储桶
//    private String fileDownURL;     // 下载链接
//    private String visitURL;        // 访问链接

    private String messageType;

    @Override
    public String toString() {
        return "FileMetadata{" +
                "targetSession=" + targetSession +
                ", senderId='" + senderId + '\'' +
                ", receiverId='" + receiverId + '\'' +
                ", fileName='" + fileName + '\'' +
                ", fileKey='" + fileKey + '\'' +
                ", fileSize=" + fileSize +
                ", messageType='" + messageType + '\'' +
                '}';
    }

    //    使用JackSn将FileMetadata对象序列化为一个JSON字符串
    public String toJson() {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
//            将FileMetadata对象序列化为JSON字符串
            return objectMapper.writeValueAsString(this);
        } catch (Exception e) {
            throw new RuntimeException("Error serializing FileMetadata to JSON", e);
        }
    }

}
